package cn.mujiankeji.mbrowser.界面.组件.标签页

import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp

/**
 * 基础标签页
 * 
 * 提供统一的标签页结构和样式，包括顶部工具栏、加载状态、空状态和错误状态的处理。
 * 
 * @param 标题 标签页标题
 * @param 返回操作 返回按钮点击回调，如果为null则不显示返回按钮
 * @param 操作按钮 顶部工具栏右侧的操作按钮
 * @param 正在加载 是否显示加载状态
 * @param 空状态 是否显示空状态
 * @param 空状态文本 空状态显示的文本
 * @param 错误信息 错误信息，如果不为null则显示错误状态
 * @param 重试操作 错误状态下的重试按钮点击回调
 * @param 底部工具栏 底部工具栏内容
 * @param 悬浮按钮 悬浮按钮内容
 * @param 内容 标签页主要内容
 */
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun 基础标签页(
    标题: String,
    返回操作: (() -> Unit)? = null,
    操作按钮: @Composable (RowScope.() -> Unit) = {},
    正在加载: Boolean = false,
    空状态: Boolean = false,
    空状态文本: String = "暂无内容",
    错误信息: String? = null,
    重试操作: (() -> Unit)? = null,
    底部工具栏: @Composable () -> Unit = {},
    悬浮按钮: @Composable () -> Unit = {},
    内容: @Composable () -> Unit
) {
    Scaffold(
        topBar = {
            TopAppBar(
                title = { Text(text = 标题) },
                navigationIcon = {
                    返回操作?.let {
                        IconButton(onClick = it) {
                            Icon(Icons.Default.ArrowBack, contentDescription = "返回")
                        }
                    }
                },
                actions = 操作按钮
            )
        },
        bottomBar = 底部工具栏,
        floatingActionButton = 悬浮按钮
    ) { paddingValues ->
        Box(
            modifier = Modifier
                .fillMaxSize()
                .padding(paddingValues)
        ) {
            when {
                正在加载 -> {
                    // 加载状态
                    Column(
                        modifier = Modifier.fillMaxSize(),
                        horizontalAlignment = Alignment.CenterHorizontally,
                        verticalArrangement = Arrangement.Center
                    ) {
                        CircularProgressIndicator()
                        
                        Spacer(modifier = Modifier.height(16.dp))
                        
                        Text(
                            text = "正在加载...",
                            style = MaterialTheme.typography.bodyMedium
                        )
                    }
                }
                错误信息 != null -> {
                    // 错误状态
                    Column(
                        modifier = Modifier.fillMaxSize(),
                        horizontalAlignment = Alignment.CenterHorizontally,
                        verticalArrangement = Arrangement.Center
                    ) {
                        Text(
                            text = 错误信息,
                            style = MaterialTheme.typography.bodyMedium,
                            color = MaterialTheme.colorScheme.error
                        )
                        
                        if (重试操作 != null) {
                            Spacer(modifier = Modifier.height(16.dp))
                            
                            androidx.compose.material3.Button(
                                onClick = 重试操作
                            ) {
                                Text("重试")
                            }
                        }
                    }
                }
                空状态 -> {
                    // 空状态
                    Box(
                        modifier = Modifier.fillMaxSize(),
                        contentAlignment = Alignment.Center
                    ) {
                        Text(
                            text = 空状态文本,
                            style = MaterialTheme.typography.bodyLarge,
                            color = MaterialTheme.colorScheme.onSurfaceVariant
                        )
                    }
                }
                else -> {
                    // 正常内容
                    内容()
                }
            }
        }
    }
} 